//
// Created by chengs1r on 2021/11/11.
//

#include <stdio.h>

int main () {
//    写法1 const char *p
    char str1[] = "hello world";
    const char *ptr1 = str1;
//    下术代码会报错 因为不能使用ptr指针修改它所指向的内存区域的内容
//    ptr[1] = 'a';
//    但是这块区域本身是可以通过数组名进行修改
    str1[2] = 'a';
//    ptr指针可以被指向其它内存地址，但是不能通过它去修改它所指向内存地址的内容
    ptr1 = &str1[2];

//    写法2 char const *p
    char str2[] = "hello world";
//    下述写法貌似在某些编译器上不能编译成功，但是在我当前环境是可以编译成功的，只需要记住这种写法和第一种写法 const char *p 是同一种结果
//    我并不知道为什么会产生这种结果
    char const *ptr2 = str2;

//    写法3 char* const p
    char str3[] = "hello world";
//    下述写法 可以理解成const修饰它后面的p 而p是char*指针变量，因此指针变量不能被修改，所以指针不能重新指向其它内存地址
//    但是 指针指向的内存地址的内容是可以被修改的
    char* const ptr3 = str3;
    ptr3[2] = 'a';
//    ptr3 = &str3[2];  报错 因为ptr3的指向不能被修改
    return 0;
}
